Skip to content

feat!: enable non-blocking DNS for reqwest#1558

Open
danielsn wants to merge 6 commits intomainfrom
dsn/hickory-dns
Open

feat!: enable non-blocking DNS for reqwest#1558
danielsn wants to merge 6 commits intomainfrom
dsn/hickory-dns

Conversation

@danielsn
Copy link
Contributor

@danielsn danielsn commented Feb 11, 2026

What does this PR do?

  1. Uses hickory dns for reqwest based networking.
  2. Temporarily gates it behind an environment variable to allow runtimes to test and opt-in.

Motivation

https://github.com/DataDog/dd-source/pull/355564

The default DNS resolver used when reqwest does not have the hickory-dns feature has a few issues:

It uses tokio::spawn_blocking for each DNS resolution, because it uses the system getaddrinfo that is sync. This can contribute to saturating the tokio blocking pool in case of slowness
It seems it does this for all DNS requests and has no applicative cache. For df-executor, it results in about 6000 DNS requests per second, the vast majority of them being DNS resolution to S3 and GCP Blob Store.
Hickory DNS is async and has applicative DNS record caching, compliant with DNS TTLs, allowing to:

Avoid saturating the blocking pool (no more blocking tasks for df-executor's IO pool with this PR deployed in staging)
Avoid DNS flooding (signal is noisy for now, I'll take a second look at a larger scale after a full night running)

The non-use of the blocking pool is particularly nice, since it lets us avoid the uncontrolled thread that can break things on forks.

Additional Notes

Anything else we should know when reviewing?

How to test the change?

Describe here in detail how the change can be validated.

@github-actions
Copy link

github-actions bot commented Feb 11, 2026

📚 Documentation Check Results

⚠️ 1283 documentation warning(s) found

📦 libdd-common - 156 warning(s)

📦 libdd-profiling - 633 warning(s)

📦 libdd-trace-obfuscation - 494 warning(s)


Updated: 2026-02-18 22:48:28 UTC | Commit: 21d9c48 | missing-docs job results

@github-actions
Copy link

github-actions bot commented Feb 11, 2026

🔒 Cargo Deny Results

⚠️ 3 issue(s) found, showing only errors (advisories, bans, sources)

📦 libdd-common - 1 error(s)

Show output
error[vulnerability]: Integer overflow in `BytesMut::reserve`
   ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:12:1
   │
12 │ bytes 1.8.0 registry+https://github.com/rust-lang/crates.io-index
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
   │
   ├ ID: RUSTSEC-2026-0007
   ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0007
   ├ In the unique reclaim path of `BytesMut::reserve`, the condition
     ```rs
     if v_capacity >= new_cap + offset
     ```
     uses an unchecked addition. When `new_cap + offset` overflows `usize` in release builds, this condition may incorrectly pass, causing `self.cap` to be set to a value that exceeds the actual allocated capacity. Subsequent APIs such as `spare_capacity_mut()` then trust this corrupted `cap` value and may create out-of-bounds slices, leading to UB.
     
     This behavior is observable in release builds (integer overflow wraps), whereas debug builds panic due to overflow checks.
     
     ## PoC
     
     ```rs
     use bytes::*;
     
     fn main() {
         let mut a = BytesMut::from(&b"hello world"[..]);
         let mut b = a.split_off(5);
     
         // Ensure b becomes the unique owner of the backing storage
         drop(a);
     
         // Trigger overflow in new_cap + offset inside reserve
         b.reserve(usize::MAX - 6);
     
         // This call relies on the corrupted cap and may cause UB & HBO
         b.put_u8(b'h');
     }
     ```
     
     # Workarounds
     
     Users of `BytesMut::reserve` are only affected if integer overflow checks are configured to wrap. When integer overflow is configured to panic, this issue does not apply.
   ├ Announcement: https://github.com/advisories/GHSA-434x-w66g-qw3r
   ├ Solution: Upgrade to >=1.11.1 (try `cargo update -p bytes`)
   ├ bytes v1.8.0
     ├── combine v4.6.7
     │   └── jni v0.21.1
     │       └── rustls-platform-verifier v0.6.2
     │           └── reqwest v0.13.1
     │               └── libdd-common v1.1.0
     ├── http v1.1.0
     │   ├── http-body v1.0.1
     │   │   ├── http-body-util v0.1.2
     │   │   │   ├── libdd-common v1.1.0 (*)
     │   │   │   └── reqwest v0.13.1 (*)
     │   │   ├── hyper v1.6.0
     │   │   │   ├── hyper-rustls v0.27.3
     │   │   │   │   ├── libdd-common v1.1.0 (*)
     │   │   │   │   └── reqwest v0.13.1 (*)
     │   │   │   ├── hyper-util v0.1.17
     │   │   │   │   ├── hyper-rustls v0.27.3 (*)
     │   │   │   │   ├── libdd-common v1.1.0 (*)
     │   │   │   │   └── reqwest v0.13.1 (*)
     │   │   │   ├── libdd-common v1.1.0 (*)
     │   │   │   └── reqwest v0.13.1 (*)
     │   │   ├── hyper-util v0.1.17 (*)
     │   │   ├── libdd-common v1.1.0 (*)
     │   │   ├── reqwest v0.13.1 (*)
     │   │   └── tower-http v0.6.8
     │   │       └── reqwest v0.13.1 (*)
     │   ├── http-body-util v0.1.2 (*)
     │   ├── hyper v1.6.0 (*)
     │   ├── hyper-rustls v0.27.3 (*)
     │   ├── hyper-util v0.1.17 (*)
     │   ├── libdd-common v1.1.0 (*)
     │   ├── multer v3.1.0
     │   │   └── libdd-common v1.1.0 (*)
     │   ├── reqwest v0.13.1 (*)
     │   └── tower-http v0.6.8 (*)
     ├── http-body v1.0.1 (*)
     ├── http-body-util v0.1.2 (*)
     ├── hyper v1.6.0 (*)
     ├── hyper-util v0.1.17 (*)
     ├── libdd-common v1.1.0 (*)
     ├── multer v3.1.0 (*)
     ├── reqwest v0.13.1 (*)
     ├── tokio v1.49.0
     │   ├── hickory-proto v0.25.2
     │   │   └── hickory-resolver v0.25.2
     │   │       └── reqwest v0.13.1 (*)
     │   ├── hickory-resolver v0.25.2 (*)
     │   ├── hyper v1.6.0 (*)
     │   ├── hyper-rustls v0.27.3 (*)
     │   ├── hyper-util v0.1.17 (*)
     │   ├── (dev) libdd-common v1.1.0 (*)
     │   ├── reqwest v0.13.1 (*)
     │   ├── tokio-rustls v0.26.0
     │   │   ├── hyper-rustls v0.27.3 (*)
     │   │   ├── libdd-common v1.1.0 (*)
     │   │   └── reqwest v0.13.1 (*)
     │   └── tower v0.5.2
     │       ├── reqwest v0.13.1 (*)
     │       └── tower-http v0.6.8 (*)
     └── tower-http v0.6.8 (*)

advisories FAILED, bans ok, sources ok

📦 libdd-profiling - 1 error(s)

Show output
error[vulnerability]: Integer overflow in `BytesMut::reserve`
   ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:31:1
   │
31 │ bytes 1.8.0 registry+https://github.com/rust-lang/crates.io-index
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
   │
   ├ ID: RUSTSEC-2026-0007
   ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0007
   ├ In the unique reclaim path of `BytesMut::reserve`, the condition
     ```rs
     if v_capacity >= new_cap + offset
     ```
     uses an unchecked addition. When `new_cap + offset` overflows `usize` in release builds, this condition may incorrectly pass, causing `self.cap` to be set to a value that exceeds the actual allocated capacity. Subsequent APIs such as `spare_capacity_mut()` then trust this corrupted `cap` value and may create out-of-bounds slices, leading to UB.
     
     This behavior is observable in release builds (integer overflow wraps), whereas debug builds panic due to overflow checks.
     
     ## PoC
     
     ```rs
     use bytes::*;
     
     fn main() {
         let mut a = BytesMut::from(&b"hello world"[..]);
         let mut b = a.split_off(5);
     
         // Ensure b becomes the unique owner of the backing storage
         drop(a);
     
         // Trigger overflow in new_cap + offset inside reserve
         b.reserve(usize::MAX - 6);
     
         // This call relies on the corrupted cap and may cause UB & HBO
         b.put_u8(b'h');
     }
     ```
     
     # Workarounds
     
     Users of `BytesMut::reserve` are only affected if integer overflow checks are configured to wrap. When integer overflow is configured to panic, this issue does not apply.
   ├ Announcement: https://github.com/advisories/GHSA-434x-w66g-qw3r
   ├ Solution: Upgrade to >=1.11.1 (try `cargo update -p bytes`)
   ├ bytes v1.8.0
     ├── combine v4.6.7
     │   └── jni v0.21.1
     │       └── rustls-platform-verifier v0.6.2
     │           └── reqwest v0.13.1
     │               ├── libdd-common v1.1.0
     │               │   └── libdd-profiling v1.0.0
     │               │       └── (dev) libdd-profiling v1.0.0 (*)
     │               └── libdd-profiling v1.0.0 (*)
     ├── http v1.1.0
     │   ├── http-body v1.0.1
     │   │   ├── http-body-util v0.1.2
     │   │   │   ├── libdd-common v1.1.0 (*)
     │   │   │   ├── libdd-profiling v1.0.0 (*)
     │   │   │   └── reqwest v0.13.1 (*)
     │   │   ├── hyper v1.6.0
     │   │   │   ├── hyper-rustls v0.27.3
     │   │   │   │   ├── libdd-common v1.1.0 (*)
     │   │   │   │   └── reqwest v0.13.1 (*)
     │   │   │   ├── hyper-util v0.1.17
     │   │   │   │   ├── hyper-rustls v0.27.3 (*)
     │   │   │   │   ├── libdd-common v1.1.0 (*)
     │   │   │   │   └── reqwest v0.13.1 (*)
     │   │   │   ├── libdd-common v1.1.0 (*)
     │   │   │   └── reqwest v0.13.1 (*)
     │   │   ├── hyper-util v0.1.17 (*)
     │   │   ├── libdd-common v1.1.0 (*)
     │   │   ├── reqwest v0.13.1 (*)
     │   │   └── tower-http v0.6.8
     │   │       └── reqwest v0.13.1 (*)
     │   ├── http-body-util v0.1.2 (*)
     │   ├── hyper v1.6.0 (*)
     │   ├── hyper-rustls v0.27.3 (*)
     │   ├── hyper-util v0.1.17 (*)
     │   ├── libdd-common v1.1.0 (*)
     │   ├── libdd-profiling v1.0.0 (*)
     │   ├── multer v3.1.0
     │   │   └── libdd-common v1.1.0 (*)
     │   ├── reqwest v0.13.1 (*)
     │   └── tower-http v0.6.8 (*)
     ├── http-body v1.0.1 (*)
     ├── http-body-util v0.1.2 (*)
     ├── hyper v1.6.0 (*)
     ├── hyper-util v0.1.17 (*)
     ├── libdd-common v1.1.0 (*)
     ├── libdd-profiling v1.0.0 (*)
     ├── multer v3.1.0 (*)
     ├── prost v0.14.3
     │   ├── libdd-profiling v1.0.0 (*)
     │   └── libdd-profiling-protobuf v1.0.0
     │       ├── libdd-profiling v1.0.0 (*)
     │       └── (dev) libdd-profiling-protobuf v1.0.0 (*)
     ├── reqwest v0.13.1 (*)
     ├── tokio v1.49.0
     │   ├── hickory-proto v0.25.2
     │   │   └── hickory-resolver v0.25.2
     │   │       └── reqwest v0.13.1 (*)
     │   ├── hickory-resolver v0.25.2 (*)
     │   ├── hyper v1.6.0 (*)
     │   ├── hyper-rustls v0.27.3 (*)
     │   ├── hyper-util v0.1.17 (*)
     │   ├── (dev) libdd-common v1.1.0 (*)
     │   ├── libdd-profiling v1.0.0 (*)
     │   ├── reqwest v0.13.1 (*)
     │   ├── tokio-rustls v0.26.0
     │   │   ├── hyper-rustls v0.27.3 (*)
     │   │   ├── libdd-common v1.1.0 (*)
     │   │   └── reqwest v0.13.1 (*)
     │   ├── tokio-util v0.7.12
     │   │   └── libdd-profiling v1.0.0 (*)
     │   └── tower v0.5.2
     │       ├── reqwest v0.13.1 (*)
     │       └── tower-http v0.6.8 (*)
     ├── tokio-util v0.7.12 (*)
     └── tower-http v0.6.8 (*)

advisories FAILED, bans ok, sources ok

📦 libdd-trace-obfuscation - 1 error(s)

Show output
error[vulnerability]: Integer overflow in `BytesMut::reserve`
   ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:42:1
   │
42 │ bytes 1.8.0 registry+https://github.com/rust-lang/crates.io-index
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
   │
   ├ ID: RUSTSEC-2026-0007
   ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0007
   ├ In the unique reclaim path of `BytesMut::reserve`, the condition
     ```rs
     if v_capacity >= new_cap + offset
     ```
     uses an unchecked addition. When `new_cap + offset` overflows `usize` in release builds, this condition may incorrectly pass, causing `self.cap` to be set to a value that exceeds the actual allocated capacity. Subsequent APIs such as `spare_capacity_mut()` then trust this corrupted `cap` value and may create out-of-bounds slices, leading to UB.
     
     This behavior is observable in release builds (integer overflow wraps), whereas debug builds panic due to overflow checks.
     
     ## PoC
     
     ```rs
     use bytes::*;
     
     fn main() {
         let mut a = BytesMut::from(&b"hello world"[..]);
         let mut b = a.split_off(5);
     
         // Ensure b becomes the unique owner of the backing storage
         drop(a);
     
         // Trigger overflow in new_cap + offset inside reserve
         b.reserve(usize::MAX - 6);
     
         // This call relies on the corrupted cap and may cause UB & HBO
         b.put_u8(b'h');
     }
     ```
     
     # Workarounds
     
     Users of `BytesMut::reserve` are only affected if integer overflow checks are configured to wrap. When integer overflow is configured to panic, this issue does not apply.
   ├ Announcement: https://github.com/advisories/GHSA-434x-w66g-qw3r
   ├ Solution: Upgrade to >=1.11.1 (try `cargo update -p bytes`)
   ├ bytes v1.8.0
     ├── h2 v0.4.6
     │   └── hyper v1.6.0
     │       ├── httpmock v0.8.0-alpha.1
     │       │   └── libdd-trace-utils v1.0.0
     │       │       ├── (dev) libdd-trace-obfuscation v1.0.0
     │       │       └── (dev) libdd-trace-utils v1.0.0 (*)
     │       ├── hyper-rustls v0.27.3
     │       │   └── libdd-common v1.1.0
     │       │       ├── libdd-trace-obfuscation v1.0.0 (*)
     │       │       └── libdd-trace-utils v1.0.0 (*)
     │       ├── hyper-util v0.1.17
     │       │   ├── httpmock v0.8.0-alpha.1 (*)
     │       │   ├── hyper-rustls v0.27.3 (*)
     │       │   └── libdd-common v1.1.0 (*)
     │       ├── libdd-common v1.1.0 (*)
     │       └── libdd-trace-utils v1.0.0 (*)
     ├── headers v0.4.0
     │   └── httpmock v0.8.0-alpha.1 (*)
     ├── http v1.1.0
     │   ├── h2 v0.4.6 (*)
     │   ├── headers v0.4.0 (*)
     │   ├── headers-core v0.3.0
     │   │   └── headers v0.4.0 (*)
     │   ├── http-body v1.0.1
     │   │   ├── http-body-util v0.1.2
     │   │   │   ├── httpmock v0.8.0-alpha.1 (*)
     │   │   │   ├── libdd-common v1.1.0 (*)
     │   │   │   └── libdd-trace-utils v1.0.0 (*)
     │   │   ├── hyper v1.6.0 (*)
     │   │   ├── hyper-util v0.1.17 (*)
     │   │   └── libdd-common v1.1.0 (*)
     │   ├── http-body-util v0.1.2 (*)
     │   ├── httpmock v0.8.0-alpha.1 (*)
     │   ├── hyper v1.6.0 (*)
     │   ├── hyper-rustls v0.27.3 (*)
     │   ├── hyper-util v0.1.17 (*)
     │   ├── libdd-common v1.1.0 (*)
     │   ├── libdd-trace-utils v1.0.0 (*)
     │   └── multer v3.1.0
     │       └── (dev) libdd-common v1.1.0 (*)
     ├── http-body v1.0.1 (*)
     ├── http-body-util v0.1.2 (*)
     ├── httpmock v0.8.0-alpha.1 (*)
     ├── hyper v1.6.0 (*)
     ├── hyper-util v0.1.17 (*)
     ├── (dev) libdd-common v1.1.0 (*)
     ├── libdd-trace-utils v1.0.0 (*)
     ├── multer v3.1.0 (*)
     ├── prost v0.14.3
     │   ├── libdd-trace-protobuf v1.0.0
     │   │   ├── libdd-trace-normalization v1.0.0
     │   │   │   └── libdd-trace-utils v1.0.0 (*)
     │   │   ├── libdd-trace-obfuscation v1.0.0 (*)
     │   │   └── libdd-trace-utils v1.0.0 (*)
     │   └── libdd-trace-utils v1.0.0 (*)
     ├── tokio v1.49.0
     │   ├── h2 v0.4.6 (*)
     │   ├── httpmock v0.8.0-alpha.1 (*)
     │   ├── hyper v1.6.0 (*)
     │   ├── hyper-rustls v0.27.3 (*)
     │   ├── hyper-util v0.1.17 (*)
     │   ├── (dev) libdd-common v1.1.0 (*)
     │   ├── (dev) libdd-trace-protobuf v1.0.0 (*)
     │   ├── (dev) libdd-trace-utils v1.0.0 (*)
     │   ├── tokio-rustls v0.26.0
     │   │   ├── hyper-rustls v0.27.3 (*)
     │   │   └── libdd-common v1.1.0 (*)
     │   └── tokio-util v0.7.12
     │       └── h2 v0.4.6 (*)
     └── tokio-util v0.7.12 (*)

advisories FAILED, bans ok, sources ok

Updated: 2026-02-18 22:47:58 UTC | Commit: 21d9c48 | dependency-check job results

@gyuheon0h gyuheon0h changed the title deps: switch DNS resolver for reqwest to hickory-dns chore(deps): switch DNS resolver for reqwest to hickory-dns Feb 11, 2026
@codecov-commenter
Copy link

codecov-commenter commented Feb 11, 2026

Codecov Report

❌ Patch coverage is 64.35644% with 36 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.20%. Comparing base (367c8b2) to head (71aba36).
⚠️ Report is 5 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1558      +/-   ##
==========================================
+ Coverage   70.85%   71.20%   +0.35%     
==========================================
  Files         424      423       -1     
  Lines       61963    62002      +39     
==========================================
+ Hits        43903    44150     +247     
+ Misses      18060    17852     -208     
Components Coverage Δ
libdd-crashtracker 62.61% <ø> (+0.16%) ⬆️
libdd-crashtracker-ffi 17.37% <ø> (+1.56%) ⬆️
libdd-alloc 98.77% <ø> (ø)
libdd-data-pipeline 86.92% <ø> (+0.95%) ⬆️
libdd-data-pipeline-ffi 73.55% <ø> (-2.08%) ⬇️
libdd-common 80.18% <58.66%> (+0.38%) ⬆️
libdd-common-ffi 73.40% <0.00%> (-0.35%) ⬇️
libdd-telemetry 62.52% <ø> (ø)
libdd-telemetry-ffi 16.75% <ø> (ø)
libdd-dogstatsd-client 82.64% <ø> (ø)
datadog-ipc 80.71% <ø> (-0.12%) ⬇️
libdd-profiling 81.38% <80.76%> (+0.15%) ⬆️
libdd-profiling-ffi 63.65% <70.58%> (-0.02%) ⬇️
datadog-sidecar 33.64% <ø> (+0.87%) ⬆️
datdog-sidecar-ffi 13.25% <ø> (+3.75%) ⬆️
spawn-worker 54.69% <ø> (ø)
libdd-tinybytes 93.16% <ø> (ø)
libdd-trace-normalization 81.71% <ø> (ø)
libdd-trace-obfuscation 94.21% <ø> (+0.02%) ⬆️
libdd-trace-protobuf 68.00% <ø> (ø)
libdd-trace-utils 89.09% <ø> (+0.36%) ⬆️
datadog-tracer-flare 90.45% <ø> (+1.49%) ⬆️
libdd-log 74.69% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@pr-commenter
Copy link

pr-commenter bot commented Feb 11, 2026

Benchmarks

Comparison

Benchmark execution time: 2026-02-18 23:03:32

Comparing candidate commit 71aba36 in PR branch dsn/hickory-dns with baseline commit 0e7299f in branch main.

Found 7 performance improvements and 9 performance regressions! Performance is the same for 41 metrics, 2 unstable metrics.

scenario:benching deserializing traces from msgpack to their internal representation

  • 🟥 execution_time [+2.148ms; +2.526ms] or [+4.456%; +5.241%]

scenario:credit_card/is_card_number/37828224631000521389798

  • 🟥 execution_time [+6.352µs; +6.377µs] or [+13.911%; +13.965%]
  • 🟥 throughput [-2684178.549op/s; -2673566.828op/s] or [-12.257%; -12.209%]

scenario:credit_card/is_card_number/x371413321323331

  • 🟩 execution_time [-402.140ns; -400.254ns] or [-6.248%; -6.219%]
  • 🟩 throughput [+10303900.746op/s; +10353164.120op/s] or [+6.632%; +6.664%]

scenario:credit_card/is_card_number_no_luhn/ 378282246310005

  • 🟥 execution_time [+4.373µs; +4.419µs] or [+8.095%; +8.181%]
  • 🟥 throughput [-1399991.793op/s; -1386083.930op/s] or [-7.562%; -7.487%]

scenario:credit_card/is_card_number_no_luhn/378282246310005

  • 🟥 execution_time [+4.179µs; +4.231µs] or [+8.295%; +8.399%]
  • 🟥 throughput [-1538261.917op/s; -1519889.580op/s] or [-7.750%; -7.657%]

scenario:credit_card/is_card_number_no_luhn/37828224631000521389798

  • 🟥 execution_time [+6.361µs; +6.386µs] or [+13.929%; +13.985%]
  • 🟥 throughput [-2687695.380op/s; -2676467.367op/s] or [-12.273%; -12.222%]

scenario:credit_card/is_card_number_no_luhn/x371413321323331

  • 🟩 execution_time [-398.703ns; -395.541ns] or [-6.195%; -6.145%]
  • 🟩 throughput [+10174461.684op/s; +10259666.965op/s] or [+6.549%; +6.603%]

scenario:normalization/normalize_service/normalize_service/[empty string]

  • 🟩 execution_time [-2.092µs; -2.072µs] or [-5.387%; -5.335%]
  • 🟩 throughput [+1451821.399op/s; +1466067.957op/s] or [+5.637%; +5.693%]

scenario:sql/obfuscate_sql_string

  • 🟩 execution_time [-4.762µs; -4.675µs] or [-5.310%; -5.214%]

Candidate

Candidate benchmark details

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
tags/replace_trace_tags execution_time 2.447µs 2.467µs ± 0.010µs 2.466µs ± 0.006µs 2.471µs 2.481µs 2.502µs 2.507µs 1.66% 1.083 2.541 0.39% 0.001µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
tags/replace_trace_tags execution_time [2.465µs; 2.468µs] or [-0.055%; +0.055%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
write only interface execution_time 1.245µs 3.214µs ± 1.412µs 2.987µs ± 0.032µs 3.023µs 3.676µs 13.939µs 14.683µs 391.60% 7.309 54.730 43.83% 0.100µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
write only interface execution_time [3.018µs; 3.409µs] or [-6.089%; +6.089%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching deserializing traces from msgpack to their internal representation execution_time 50.125ms 50.535ms ± 1.010ms 50.425ms ± 0.113ms 50.523ms 50.580ms 56.797ms 59.708ms 18.41% 7.785 61.900 1.99% 0.071ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching deserializing traces from msgpack to their internal representation execution_time [50.395ms; 50.675ms] or [-0.277%; +0.277%] None None None

Group 4

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching serializing traces from their internal representation to msgpack execution_time 14.608ms 14.678ms ± 0.044ms 14.668ms ± 0.022ms 14.693ms 14.756ms 14.840ms 14.961ms 2.00% 2.309 9.230 0.30% 0.003ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching serializing traces from their internal representation to msgpack execution_time [14.672ms; 14.684ms] or [-0.042%; +0.042%] None None None

Group 5

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sql/obfuscate_sql_string execution_time 84.565µs 84.949µs ± 0.269µs 84.916µs ± 0.053µs 84.989µs 85.100µs 85.275µs 88.285µs 3.97% 9.911 118.481 0.32% 0.019µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sql/obfuscate_sql_string execution_time [84.912µs; 84.987µs] or [-0.044%; +0.044%] None None None

Group 6

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
receiver_entry_point/report/2597 execution_time 9.638ms 9.899ms ± 0.083ms 9.912ms ± 0.038ms 9.951ms 10.006ms 10.049ms 10.073ms 1.62% -1.125 1.325 0.84% 0.006ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
receiver_entry_point/report/2597 execution_time [9.888ms; 9.911ms] or [-0.116%; +0.116%] None None None

Group 7

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample2_frames_x1000 execution_time 748.478µs 749.785µs ± 0.622µs 749.735µs ± 0.451µs 750.195µs 750.793µs 751.288µs 752.229µs 0.33% 0.451 0.369 0.08% 0.044µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample2_frames_x1000 execution_time [749.698µs; 749.871µs] or [-0.012%; +0.012%] None None None

Group 8

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
two way interface execution_time 17.580µs 25.636µs ± 9.713µs 17.953µs ± 0.169µs 34.025µs 43.448µs 44.448µs 68.270µs 280.27% 0.985 0.784 37.79% 0.687µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
two way interface execution_time [24.289µs; 26.982µs] or [-5.251%; +5.251%] None None None

Group 9

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_trace/test_trace execution_time 247.046ns 256.649ns ± 10.269ns 251.677ns ± 2.363ns 261.645ns 280.024ns 285.282ns 287.042ns 14.05% 1.508 1.097 3.99% 0.726ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_trace/test_trace execution_time [255.226ns; 258.073ns] or [-0.555%; +0.555%] None None None

Group 10

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
redis/obfuscate_redis_string execution_time 33.872µs 34.642µs ± 1.043µs 34.010µs ± 0.085µs 35.615µs 36.650µs 36.879µs 37.160µs 9.26% 1.054 -0.663 3.00% 0.074µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
redis/obfuscate_redis_string execution_time [34.498µs; 34.787µs] or [-0.417%; +0.417%] None None None

Group 11

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... execution_time 494.066µs 494.935µs ± 0.569µs 494.847µs ± 0.247µs 495.149µs 495.630µs 495.981µs 500.800µs 1.20% 5.596 54.612 0.11% 0.040µs 1 200
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput 1996804.890op/s 2020471.127op/s ± 2308.585op/s 2020826.299op/s ± 1009.254op/s 2021674.825op/s 2023036.440op/s 2023520.323op/s 2024020.399op/s 0.16% -5.509 53.427 0.11% 163.242op/s 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time 370.477µs 371.305µs ± 0.268µs 371.279µs ± 0.172µs 371.481µs 371.770µs 372.060µs 372.094µs 0.22% 0.338 0.401 0.07% 0.019µs 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput 2687495.458op/s 2693206.829op/s ± 1943.468op/s 2693391.985op/s ± 1247.914op/s 2694435.440op/s 2696008.950op/s 2697558.823op/s 2699219.409op/s 0.22% -0.333 0.399 0.07% 137.424op/s 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time 167.582µs 167.935µs ± 0.168µs 167.919µs ± 0.096µs 168.020µs 168.238µs 168.420µs 168.620µs 0.42% 0.813 1.698 0.10% 0.012µs 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput 5930497.875op/s 5954677.826op/s ± 5960.020op/s 5955244.812op/s ± 3420.619op/s 5958589.260op/s 5963896.829op/s 5966346.366op/s 5967212.250op/s 0.20% -0.804 1.672 0.10% 421.437op/s 1 200
normalization/normalize_service/normalize_service/[empty string] execution_time 36.618µs 36.748µs ± 0.050µs 36.744µs ± 0.032µs 36.778µs 36.830µs 36.883µs 36.898µs 0.42% 0.254 0.491 0.14% 0.004µs 1 200
normalization/normalize_service/normalize_service/[empty string] throughput 27101564.848op/s 27212657.540op/s ± 37061.091op/s 27215241.548op/s ± 23884.691op/s 27236865.179op/s 27268925.202op/s 27301481.221op/s 27308774.277op/s 0.34% -0.244 0.484 0.14% 2620.615op/s 1 200
normalization/normalize_service/normalize_service/test_ASCII execution_time 45.309µs 45.495µs ± 0.136µs 45.495µs ± 0.077µs 45.570µs 45.631µs 45.673µs 46.843µs 2.96% 4.803 46.381 0.30% 0.010µs 1 200
normalization/normalize_service/normalize_service/test_ASCII throughput 21347841.010op/s 21980514.106op/s ± 64752.583op/s 21980313.970op/s ± 37310.166op/s 22024322.823op/s 22063549.898op/s 22069959.934op/s 22070762.297op/s 0.41% -4.581 43.561 0.29% 4578.699op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... execution_time [494.856µs; 495.014µs] or [-0.016%; +0.016%] None None None
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput [2020151.180op/s; 2020791.075op/s] or [-0.016%; +0.016%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time [371.268µs; 371.342µs] or [-0.010%; +0.010%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput [2692937.483op/s; 2693476.175op/s] or [-0.010%; +0.010%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time [167.912µs; 167.959µs] or [-0.014%; +0.014%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput [5953851.824op/s; 5955503.827op/s] or [-0.014%; +0.014%] None None None
normalization/normalize_service/normalize_service/[empty string] execution_time [36.741µs; 36.755µs] or [-0.019%; +0.019%] None None None
normalization/normalize_service/normalize_service/[empty string] throughput [27207521.230op/s; 27217793.851op/s] or [-0.019%; +0.019%] None None None
normalization/normalize_service/normalize_service/test_ASCII execution_time [45.476µs; 45.514µs] or [-0.041%; +0.041%] None None None
normalization/normalize_service/normalize_service/test_ASCII throughput [21971540.021op/s; 21989488.191op/s] or [-0.041%; +0.041%] None None None

Group 12

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... execution_time 185.424µs 185.920µs ± 0.354µs 185.846µs ± 0.197µs 186.072µs 186.545µs 187.298µs 187.338µs 0.80% 1.908 4.842 0.19% 0.025µs 1 200
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput 5337933.208op/s 5378677.774op/s ± 10200.486op/s 5380810.739op/s ± 5700.370op/s 5385762.293op/s 5389916.606op/s 5391697.619op/s 5393045.129op/s 0.23% -1.890 4.762 0.19% 721.283op/s 1 200
normalization/normalize_name/normalize_name/bad-name execution_time 17.807µs 17.904µs ± 0.070µs 17.902µs ± 0.040µs 17.937µs 17.983µs 18.035µs 18.596µs 3.88% 5.012 47.312 0.39% 0.005µs 1 200
normalization/normalize_name/normalize_name/bad-name throughput 53774252.075op/s 55855188.294op/s ± 212954.422op/s 55861070.271op/s ± 123508.935op/s 56000625.961op/s 56085491.447op/s 56132547.113op/s 56158220.832op/s 0.53% -4.738 43.748 0.38% 15058.152op/s 1 200
normalization/normalize_name/normalize_name/good execution_time 9.841µs 9.896µs ± 0.026µs 9.890µs ± 0.014µs 9.909µs 9.939µs 9.977µs 10.015µs 1.26% 1.239 2.710 0.26% 0.002µs 1 200
normalization/normalize_name/normalize_name/good throughput 99852591.714op/s 101056612.156op/s ± 259858.160op/s 101111351.968op/s ± 140555.289op/s 101230165.350op/s 101363233.732op/s 101486753.840op/s 101617323.780op/s 0.50% -1.214 2.612 0.26% 18374.747op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... execution_time [185.871µs; 185.969µs] or [-0.026%; +0.026%] None None None
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput [5377264.085op/s; 5380091.463op/s] or [-0.026%; +0.026%] None None None
normalization/normalize_name/normalize_name/bad-name execution_time [17.894µs; 17.913µs] or [-0.054%; +0.054%] None None None
normalization/normalize_name/normalize_name/bad-name throughput [55825674.859op/s; 55884701.729op/s] or [-0.053%; +0.053%] None None None
normalization/normalize_name/normalize_name/good execution_time [9.892µs; 9.899µs] or [-0.036%; +0.036%] None None None
normalization/normalize_name/normalize_name/good throughput [101020598.314op/s; 101092625.998op/s] or [-0.036%; +0.036%] None None None

Group 13

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
concentrator/add_spans_to_concentrator execution_time 10.594ms 10.621ms ± 0.012ms 10.619ms ± 0.008ms 10.627ms 10.642ms 10.659ms 10.668ms 0.46% 0.912 1.418 0.11% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
concentrator/add_spans_to_concentrator execution_time [10.619ms; 10.622ms] or [-0.016%; +0.016%] None None None

Group 14

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
ip_address/quantize_peer_ip_address_benchmark execution_time 5.026µs 5.089µs ± 0.058µs 5.059µs ± 0.024µs 5.127µs 5.200µs 5.204µs 5.204µs 2.88% 0.791 -0.876 1.13% 0.004µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
ip_address/quantize_peer_ip_address_benchmark execution_time [5.081µs; 5.097µs] or [-0.157%; +0.157%] None None None

Group 15

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sdk_test_data/rules-based execution_time 144.813µs 146.735µs ± 1.621µs 146.402µs ± 0.471µs 147.092µs 148.461µs 152.849µs 161.724µs 10.47% 5.367 41.063 1.10% 0.115µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sdk_test_data/rules-based execution_time [146.511µs; 146.960µs] or [-0.153%; +0.153%] None None None

Group 16

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching string interning on wordpress profile execution_time 160.597µs 161.344µs ± 0.266µs 161.286µs ± 0.145µs 161.479µs 161.774µs 162.395µs 162.471µs 0.73% 1.333 3.668 0.16% 0.019µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching string interning on wordpress profile execution_time [161.307µs; 161.380µs] or [-0.023%; +0.023%] None None None

Group 17

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
single_flag_killswitch/rules-based execution_time 187.346ns 190.306ns ± 2.258ns 190.076ns ± 1.323ns 191.221ns 194.399ns 197.384ns 201.729ns 6.13% 1.583 4.003 1.18% 0.160ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
single_flag_killswitch/rules-based execution_time [189.993ns; 190.619ns] or [-0.164%; +0.164%] None None None

Group 18

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
credit_card/is_card_number/ execution_time 3.892µs 3.914µs ± 0.004µs 3.914µs ± 0.003µs 3.917µs 3.921µs 3.924µs 3.927µs 0.32% -0.436 4.874 0.10% 0.000µs 1 200
credit_card/is_card_number/ throughput 254661470.616op/s 255471366.370op/s ± 254258.980op/s 255483410.153op/s ± 177564.993op/s 255659287.389op/s 255780559.375op/s 255840035.275op/s 256950299.519op/s 0.57% 0.456 4.975 0.10% 17978.825op/s 1 200
credit_card/is_card_number/ 3782-8224-6310-005 execution_time 76.520µs 77.895µs ± 0.676µs 77.794µs ± 0.451µs 78.351µs 79.103µs 79.591µs 79.982µs 2.81% 0.504 -0.101 0.87% 0.048µs 1 200
credit_card/is_card_number/ 3782-8224-6310-005 throughput 12502802.227op/s 12838678.777op/s ± 110938.634op/s 12854449.617op/s ± 74675.185op/s 12924149.097op/s 12999789.699op/s 13044731.711op/s 13068529.138op/s 1.67% -0.462 -0.162 0.86% 7844.546op/s 1 200
credit_card/is_card_number/ 378282246310005 execution_time 69.938µs 70.913µs ± 0.582µs 70.843µs ± 0.355µs 71.198µs 72.034µs 72.866µs 73.025µs 3.08% 0.887 1.165 0.82% 0.041µs 1 200
credit_card/is_card_number/ 378282246310005 throughput 13694017.569op/s 14102651.985op/s ± 114897.330op/s 14115734.812op/s ± 70398.558op/s 14184081.881op/s 14271531.162op/s 14290772.716op/s 14298411.913op/s 1.29% -0.829 1.008 0.81% 8124.468op/s 1 200
credit_card/is_card_number/37828224631 execution_time 3.896µs 3.913µs ± 0.003µs 3.912µs ± 0.002µs 3.914µs 3.917µs 3.919µs 3.920µs 0.20% -0.929 6.739 0.07% 0.000µs 1 200
credit_card/is_card_number/37828224631 throughput 255086116.534op/s 255574433.925op/s ± 178020.546op/s 255591437.991op/s ± 104722.090op/s 255679956.771op/s 255821181.435op/s 255925757.089op/s 256696084.199op/s 0.43% 0.945 6.845 0.07% 12587.954op/s 1 200
credit_card/is_card_number/378282246310005 execution_time 66.938µs 68.106µs ± 0.623µs 68.071µs ± 0.400µs 68.463µs 69.238µs 69.574µs 69.899µs 2.68% 0.412 -0.335 0.91% 0.044µs 1 200
credit_card/is_card_number/378282246310005 throughput 14306418.969op/s 14684306.496op/s ± 133835.842op/s 14690521.065op/s ± 86782.027op/s 14776817.333op/s 14883746.127op/s 14911471.732op/s 14939142.810op/s 1.69% -0.371 -0.381 0.91% 9463.623op/s 1 200
credit_card/is_card_number/37828224631000521389798 execution_time 51.872µs 52.028µs ± 0.063µs 52.028µs ± 0.044µs 52.070µs 52.135µs 52.170µs 52.197µs 0.32% 0.088 -0.269 0.12% 0.004µs 1 200
credit_card/is_card_number/37828224631000521389798 throughput 19158238.613op/s 19220307.794op/s ± 23302.458op/s 19220339.384op/s ± 16159.599op/s 19237622.495op/s 19257877.822op/s 19272880.071op/s 19278402.406op/s 0.30% -0.081 -0.270 0.12% 1647.733op/s 1 200
credit_card/is_card_number/x371413321323331 execution_time 6.029µs 6.035µs ± 0.005µs 6.034µs ± 0.002µs 6.037µs 6.040µs 6.070µs 6.072µs 0.63% 4.508 27.516 0.09% 0.000µs 1 200
credit_card/is_card_number/x371413321323331 throughput 164697617.361op/s 165697271.660op/s ± 144404.920op/s 165729400.400op/s ± 54459.795op/s 165771870.399op/s 165831229.715op/s 165855439.222op/s 165871544.351op/s 0.09% -4.484 27.303 0.09% 10210.970op/s 1 200
credit_card/is_card_number_no_luhn/ execution_time 3.893µs 3.913µs ± 0.003µs 3.912µs ± 0.002µs 3.914µs 3.917µs 3.918µs 3.919µs 0.17% -1.310 10.124 0.07% 0.000µs 1 200
credit_card/is_card_number_no_luhn/ throughput 255181349.478op/s 255590875.375op/s ± 186605.129op/s 255612064.890op/s ± 107540.639op/s 255711803.598op/s 255822321.112op/s 255884840.335op/s 256889250.079op/s 0.50% 1.333 10.303 0.07% 13194.975op/s 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time 63.838µs 64.253µs ± 0.194µs 64.250µs ± 0.128µs 64.372µs 64.585µs 64.696µs 64.976µs 1.13% 0.390 0.284 0.30% 0.014µs 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput 15390384.502op/s 15563519.647op/s ± 46824.759op/s 15564276.095op/s ± 30826.822op/s 15596334.872op/s 15634401.470op/s 15657118.438op/s 15664586.657op/s 0.64% -0.371 0.248 0.30% 3311.010op/s 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time 58.155µs 58.414µs ± 0.151µs 58.384µs ± 0.073µs 58.462µs 58.734µs 58.885µs 59.105µs 1.23% 1.543 3.039 0.26% 0.011µs 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 throughput 16919163.875op/s 17119252.147op/s ± 44151.363op/s 17128089.448op/s ± 21385.629op/s 17148789.000op/s 17166810.396op/s 17189995.285op/s 17195341.782op/s 0.39% -1.523 2.955 0.26% 3121.973op/s 1 200
credit_card/is_card_number_no_luhn/37828224631 execution_time 3.892µs 3.913µs ± 0.003µs 3.912µs ± 0.002µs 3.914µs 3.918µs 3.920µs 3.923µs 0.27% -0.882 10.512 0.08% 0.000µs 1 200
credit_card/is_card_number_no_luhn/37828224631 throughput 254921933.150op/s 255577916.415op/s ± 200098.269op/s 255601929.799op/s ± 100657.752op/s 255699281.639op/s 255798129.725op/s 255864970.693op/s 256953011.779op/s 0.53% 0.910 10.694 0.08% 14149.084op/s 1 200
credit_card/is_card_number_no_luhn/378282246310005 execution_time 54.306µs 54.586µs ± 0.157µs 54.562µs ± 0.081µs 54.658µs 54.923µs 54.992µs 55.158µs 1.09% 0.959 0.983 0.29% 0.011µs 1 200
credit_card/is_card_number_no_luhn/378282246310005 throughput 18129679.231op/s 18319715.024op/s ± 52526.801op/s 18327913.570op/s ± 27209.073op/s 18353702.790op/s 18395208.700op/s 18408398.342op/s 18414014.907op/s 0.47% -0.942 0.943 0.29% 3714.206op/s 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time 51.865µs 52.039µs ± 0.060µs 52.036µs ± 0.041µs 52.078µs 52.140µs 52.182µs 52.195µs 0.31% 0.024 0.071 0.12% 0.004µs 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput 19158852.899op/s 19216441.292op/s ± 22301.465op/s 19217341.411op/s ± 14979.679op/s 19232015.307op/s 19253570.021op/s 19267809.413op/s 19280844.481op/s 0.33% -0.017 0.072 0.12% 1576.952op/s 1 200
credit_card/is_card_number_no_luhn/x371413321323331 execution_time 6.027µs 6.039µs ± 0.011µs 6.037µs ± 0.004µs 6.040µs 6.070µs 6.081µs 6.098µs 1.01% 2.775 8.406 0.18% 0.001µs 1 200
credit_card/is_card_number_no_luhn/x371413321323331 throughput 163985968.109op/s 165585323.198op/s ± 292819.787op/s 165644748.933op/s ± 103114.741op/s 165755192.443op/s 165820904.956op/s 165865049.109op/s 165926277.432op/s 0.17% -2.760 8.314 0.18% 20705.486op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
credit_card/is_card_number/ execution_time [3.914µs; 3.915µs] or [-0.014%; +0.014%] None None None
credit_card/is_card_number/ throughput [255436128.520op/s; 255506604.219op/s] or [-0.014%; +0.014%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 execution_time [77.802µs; 77.989µs] or [-0.120%; +0.120%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 throughput [12823303.749op/s; 12854053.804op/s] or [-0.120%; +0.120%] None None None
credit_card/is_card_number/ 378282246310005 execution_time [70.833µs; 70.994µs] or [-0.114%; +0.114%] None None None
credit_card/is_card_number/ 378282246310005 throughput [14086728.321op/s; 14118575.650op/s] or [-0.113%; +0.113%] None None None
credit_card/is_card_number/37828224631 execution_time [3.912µs; 3.913µs] or [-0.010%; +0.010%] None None None
credit_card/is_card_number/37828224631 throughput [255549761.989op/s; 255599105.860op/s] or [-0.010%; +0.010%] None None None
credit_card/is_card_number/378282246310005 execution_time [68.019µs; 68.192µs] or [-0.127%; +0.127%] None None None
credit_card/is_card_number/378282246310005 throughput [14665758.136op/s; 14702854.857op/s] or [-0.126%; +0.126%] None None None
credit_card/is_card_number/37828224631000521389798 execution_time [52.020µs; 52.037µs] or [-0.017%; +0.017%] None None None
credit_card/is_card_number/37828224631000521389798 throughput [19217078.297op/s; 19223537.291op/s] or [-0.017%; +0.017%] None None None
credit_card/is_card_number/x371413321323331 execution_time [6.034µs; 6.036µs] or [-0.012%; +0.012%] None None None
credit_card/is_card_number/x371413321323331 throughput [165677258.527op/s; 165717284.793op/s] or [-0.012%; +0.012%] None None None
credit_card/is_card_number_no_luhn/ execution_time [3.912µs; 3.913µs] or [-0.010%; +0.010%] None None None
credit_card/is_card_number_no_luhn/ throughput [255565013.699op/s; 255616737.051op/s] or [-0.010%; +0.010%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time [64.227µs; 64.280µs] or [-0.042%; +0.042%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput [15557030.185op/s; 15570009.108op/s] or [-0.042%; +0.042%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time [58.393µs; 58.435µs] or [-0.036%; +0.036%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 throughput [17113133.193op/s; 17125371.101op/s] or [-0.036%; +0.036%] None None None
credit_card/is_card_number_no_luhn/37828224631 execution_time [3.912µs; 3.913µs] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/37828224631 throughput [255550184.719op/s; 255605648.110op/s] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/378282246310005 execution_time [54.565µs; 54.608µs] or [-0.040%; +0.040%] None None None
credit_card/is_card_number_no_luhn/378282246310005 throughput [18312435.314op/s; 18326994.733op/s] or [-0.040%; +0.040%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time [52.030µs; 52.047µs] or [-0.016%; +0.016%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput [19213350.523op/s; 19219532.061op/s] or [-0.016%; +0.016%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 execution_time [6.038µs; 6.041µs] or [-0.025%; +0.025%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 throughput [165544741.192op/s; 165625905.204op/s] or [-0.025%; +0.025%] None None None

Group 19

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 71aba36 1771454816 dsn/hickory-dns
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample_frames_x1000 execution_time 4.182ms 4.193ms ± 0.008ms 4.193ms ± 0.002ms 4.196ms 4.199ms 4.212ms 4.286ms 2.20% 7.705 86.825 0.19% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample_frames_x1000 execution_time [4.192ms; 4.194ms] or [-0.027%; +0.027%] None None None

Baseline

Omitted due to size.

@danielsn danielsn requested a review from a team as a code owner February 11, 2026 22:10
@dd-octo-sts
Copy link

dd-octo-sts bot commented Feb 11, 2026

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 8.38 MB 9.01 MB +7.49% (+643.71 KB) 🚨
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 91.60 MB 98.06 MB +7.04% (+6.45 MB) 🚨
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 106.31 MB 113.69 MB +6.94% (+7.38 MB) 🚨
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.76 MB 11.58 MB +7.63% (+841.63 KB) 🚨
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 25.01 MB 27.73 MB +10.88% (+2.72 MB) 🚨
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 75.94 KB 76.26 KB +.41% (+324 B) 🔍
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 166.61 MB 186.33 MB +11.83% (+19.71 MB) 🚨
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 838.60 MB 919.90 MB +9.69% (+81.30 MB) 🚨
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 9.57 MB 10.33 MB +7.96% (+781.00 KB) 🚨
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 75.94 KB 76.26 KB +.41% (+324 B) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 23.02 MB 24.98 MB +8.51% (+1.96 MB) 🚨
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 48.42 MB 52.29 MB +7.98% (+3.86 MB) 🚨
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 21.09 MB 23.49 MB +11.36% (+2.39 MB) 🚨
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 77.12 KB 77.44 KB +.41% (+330 B) 🔍
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 170.37 MB 190.78 MB +11.98% (+20.41 MB) 🚨
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 824.57 MB 905.31 MB +9.79% (+80.74 MB) 🚨
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 7.24 MB 7.84 MB +8.25% (+612.00 KB) 🚨
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 77.12 KB 77.44 KB +.41% (+330 B) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 24.62 MB 26.75 MB +8.66% (+2.13 MB) 🚨
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 44.15 MB 47.82 MB +8.30% (+3.66 MB) 🚨
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 80.15 MB 86.17 MB +7.52% (+6.02 MB) 🚨
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 9.87 MB 10.53 MB +6.68% (+675.71 KB) 🚨
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 100.25 MB 106.77 MB +6.51% (+6.52 MB) 🚨
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.44 MB 12.28 MB +7.30% (+856.57 KB) 🚨

@danielsn danielsn requested a review from a team as a code owner February 12, 2026 00:23
Copy link
Member

@ivoanjo ivoanjo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, this was way easier than I was expecting! I've left you a question in PM, otherwise happy to approve :)

@danielsn danielsn changed the title chore(deps): switch DNS resolver for reqwest to hickory-dns feat: enable non-blocking DNS for reqwest Feb 12, 2026
@github-actions
Copy link

github-actions bot commented Feb 17, 2026

Clippy Allow Annotation Report

Comparing clippy allow annotations between branches:

  • Base Branch: origin/main
  • PR Branch: origin/dsn/hickory-dns

Summary by Rule

Rule Base Branch PR Branch Change
unwrap_used 5 5 No change (0%)
Total 5 5 No change (0%)

Annotation Counts by File

File Base Branch PR Branch Change
libdd-common-ffi/src/endpoint.rs 2 2 No change (0%)
libdd-common/src/lib.rs 3 3 No change (0%)

Annotation Stats by Crate

Crate Base Branch PR Branch Change
clippy-annotation-reporter 5 5 No change (0%)
datadog-ffe-ffi 1 1 No change (0%)
datadog-ipc 27 27 No change (0%)
datadog-live-debugger 6 6 No change (0%)
datadog-live-debugger-ffi 10 10 No change (0%)
datadog-profiling-replayer 4 4 No change (0%)
datadog-remote-config 3 3 No change (0%)
datadog-sidecar 59 59 No change (0%)
libdd-common 10 10 No change (0%)
libdd-common-ffi 12 12 No change (0%)
libdd-crashtracker 12 12 No change (0%)
libdd-data-pipeline 5 5 No change (0%)
libdd-ddsketch 2 2 No change (0%)
libdd-dogstatsd-client 1 1 No change (0%)
libdd-profiling 13 13 No change (0%)
libdd-telemetry 19 19 No change (0%)
libdd-tinybytes 4 4 No change (0%)
libdd-trace-normalization 2 2 No change (0%)
libdd-trace-obfuscation 9 9 No change (0%)
libdd-trace-utils 15 15 No change (0%)
Total 219 219 No change (0%)

About This Report

This report tracks Clippy allow annotations for specific rules, showing how they've changed in this PR. Decreasing the number of these annotations generally improves code quality.

Copy link
Member

@ivoanjo ivoanjo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really like this! Left a few notes :)

Comment on lines -149 to +158
#
# `rustls-platform-verifier` uses the Windows certificate APIs (Cert*), which live in Crypt32.
"ws2_32.lib", "advapi32.lib", "userenv.lib", "ntdll.lib", "bcrypt.lib", "ole32.lib", "crypt32.lib"
"advapi32.lib",
"bcrypt.lib",
# `rustls-platform-verifier` uses the Windows certificate APIs (Cert*), which live in Crypt32
"crypt32.lib",
# `hickory-resolver` uses GetAdaptersAddresses, which lives in iphlpapi.
"iphlpapi.lib",
"ntdll.lib",
"ole32.lib",
"userenv.lib",
"ws2_32.lib"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Note to other reviewers -- same list of libraries reordered, with only iphlpapi.lib being new)

PowrProf
Version)
Version
iphlpapi)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This part I'm not confident at all in -- maybe worth confirming with @gleocadie that this new dll dependency is fine?

Comment on lines 348 to 353
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regardless of the default (I'll comment on that separately), DD_USE_HICKORY_DNS seems to be a bit... too low level?

Maybe flip it around and use DD_FORCE_SYSTEM_DNS/DD_USE_LEGACY_DNS? Or, if not flipping it, DD_USE_BUILTIN_DNS?

Comment on lines 346 to 347
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unless I'm mistaken, only profiling is using the to_reqwest_client_builder. Being that the case, since it's already quite limited subset, I'd go with perhaps using hickory_dns by default, and then dropping a note to every library using libdatadog to perhaps include the env var as a release note in case anyone sees any resolver-related issues?

Also, and I think this would make testing a lot easier -- maybe we could take advantage of the above in an additional way: make the use_hickory a regular argument of this method, and have the env var parsing be part of the caller for now.

This enables easier testing of common AND enables us to evolve a bit how this toggling happens without ever needing to touch this code (which seems nice?)

Comment on lines 86 to 135
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmmm... this is quite brittle -- for instance reading the docs:

Image

It sounds like hickory may even be used by default even if the feature isn't enabled...? So there's a non-zero chance this test is not only brittle, but possibly misleading?


Looking at the docs, it looks like the reqwest::Client::builder() has also a dns_resolver parameter where a resolver can be passed in.

What if we allowed the resolver to be injected? E.g. basically reproduce what the match config.hickory_dns is doing in https://docs.rs/reqwest/latest/src/reqwest/async_impl/client.rs.html#421 ?

That way our tests could become:

fn test_without_hickory() {
  let resolver = GaiResolver::new();
  let builder = to_reqwest_client_builder(resolver);
  
  let response = ...
  // maybe somehow assert resolver got called?
}

fn test_with_hickory() {
  let resolver = HickoryDnsResolver::default();
  let builder = to_reqwest_client_builder(resolver);

  let response = ...
  // maybe somehow assert resolver got called? perhaps even by setting some config where only hickory can resolve?
}

Comment on lines 149 to 174
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test seems to be somewhat... weird/unfair. That is why do we drop the client before we do the check for hickory but not the system dns? Doesn't that mean that if hickory did actually use an extra thread but cleaned it up on drop, we wouldn't see it?

E.g. I think the test should maybe be exactly the same between both variants, the only difference should be the actual toggling on and off, and us observing the different number of threads, not the order of operations.

Comment on lines 176 to 182
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this test... going to be flaky? E.g. I can imagine we're relying on things such as "how long does the background extra thread spawned for dns stay alive" -- or would it stay alive forever? Might be worth doing a quick check that this test is not relying too much on a race.

@datadog-datadog-prod-us1
Copy link
Contributor

datadog-datadog-prod-us1 bot commented Feb 18, 2026

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 71aba36 | Docs | Datadog PR Page | Was this helpful? Give us feedback!

@danielsn danielsn changed the title feat: enable non-blocking DNS for reqwest feat!: enable non-blocking DNS for reqwest Feb 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

Comments